package org.example.mock;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Objects;

/**

 电影类型统计模型类
 用于记录电影类型及其对应的数量统计信息
 实现 Serializable 接口以便于序列化和传输
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MovieTypeCount implements Serializable {
    private static final long serialVersionUID = 1L;
    /** 电影类型 ID */
    private String typeId;
    /** 电影类型名称 */
    private String type;



    private int count;
    /** 关联的电影 ID（如果有业务需要） */
    private String movieId;
    /**
     构造函数 - 带类型 ID 和类型名称
     */
    public MovieTypeCount (String typeId, String type) {
        this.typeId = typeId;
        this.type = type;
        this.count = 1;
    }

    /**
     增加类型计数
     @param increment 增加的数量，默认为 1
     */
    public void incrementCount (int increment) {
        if (increment > 0) {
            this.count += increment;
        }
    }
    /**
     增加类型计数（默认增加 1）
     */
    public void incrementCount () {
        incrementCount (1);
    }
    /**
     减少类型计数
     @param decrement 减少的数量，必须大于 0 且不超过当前计数
     @return 是否成功减少计数
     */
    public boolean decrementCount (int decrement) {
        if (decrement > 0 && decrement <= this.count) {
            this.count -= decrement;
            return true;
        }
        return false;
    }
    /**
     类型是否为空
     @return true 如果类型为空或空白
     */
    public boolean isTypeEmpty () {
        return type == null || type.trim ().isEmpty ();
    }
    /**
     数量是否为 0
     @return true 如果数量为 0
     */
    public boolean isCountZero () {
        return count == 0;
    }
    /**
     比较两个 MovieTypeCount 对象的数量
     @param other 另一个 MovieTypeCount 对象
     @return 数量比较结果：负数 - 当前小于 other，0 - 相等，正数 - 当前大于 other
     */
    public int compareByCount (MovieTypeCount other) {
        return Integer.compare (this.count, other.count);
    }
    /**
     重写 equals 方法，基于类型 ID 比较
     */
    @Override
    public boolean equals (Object o) {
        if (this == o) return true;
        if (o == null || getClass () != o.getClass ()) return false;
        MovieTypeCount that = (MovieTypeCount) o;
        return Objects.equals (typeId, that.typeId);
    }
    /**
     重写 hashCode 方法，基于类型 ID 生成
     */
    @Override
    public int hashCode () {
        return Objects.hash (typeId);
    }
    /**
     重写 toString 方法，提供更友好的输出格式
     */
    @Override
    public String toString () {
        return String.format("MovieTypeCount{movieId='%s', typeId='%s'}",
                movieId, typeId);
    }
}
